/*
	地图
*/
define(
	[
		'require',
		'echarts',
		'echarts/chart/map',
		'zrender/tool/util',
		'apm/ui/business_chart_base',
		'echarts/geoJson/china-main-city/china-main-city-map',
	],
	function (require) {
		"use strict";
		var isNone = Ember.isNone;
		function transform_num(val){
			if(isNone(val)){
				return "-";
			}
			val = parseInt(val, 10);
			if (val < 2000) {
				return (val/1000).toFixed(3);
			} else if (val < 1000000) {
				return (val/1000).toFixed(2);
			} else if (val < 60000000){
				return (val/1000000).toFixed(0);
			} else if (val < 3600000000){
				return  (val/60000000).toFixed(0);
			} else {
				return  (val/3600000000).toFixed(0); 
			}
		}

		var echarts = require('echarts');
		var zrUtil = require('zrender/tool/util');
		var positionShow;
		var forEach = Ember.EnumerableUtils.forEach;
		
		var mapGeoData = require('echarts/util/mapData/params');
		for (var city in cityMap) {
			// 自定义扩展图表类型
			mapGeoData.params[city] = {
				getGeoJson: (function (c) {
					var geoJsonName = cityMap[c];
					return function (callback) {
						$.getJSON('resource/echarts/geoJson/china-main-city/' + geoJsonName + '.json', callback);
					}
				})(city)
			}
		}

		var MapView = require('apm/ui/business_chart_base').extend({
			didInsertElement: function(){
				var $dom = this.$();

				this.width = this.width||$dom.width();
				this.height = this.height||$dom.height();

				if(this.width === 0 || this.height === 0){
					Ember.assert("必须指定视图的width和height。（可通过样式或width，height属性");
					return;
				}

				this._initChart();
			},

			willDestroyElement: function(){
				this.chart.dispose();
				this.chart = null;
			},

			/**
			 * 初始化图表
			 */
			_initChart: function(){
				var $dom = this.$();
				positionShow = this.get("positionShow") == false?this.get("positionShow"):true;
				if(G_vmlCanvasManager && G_vmlCanvasManager.init){
					G_vmlCanvasManager.initElement($dom[0]);
				}

				var chart = echarts.init($dom[0]);
				this.chart = chart;

				this.dataChange();
			},

			/**
			 * 数据改变后, 刷新图表
			 */
			dataChange: Ember.observer("data", function(){
				if(!this.chart || !this.get("data")){
					return;
				}

				var option = this._getDefaultOption();

				this.option = option;

				this.hasData = false;

				this._translateOption(option);

				this.chart.setOption(option, true);
				this.chart.hideLoading();
			}),

			_translateOption: function(option){
				this._translateSeries(option);
				this._translateOther(option);
				this._setFormatter(option);
			},

			_getDefaultOption: function(){
				return {
					title : {
						text: '',
						padding:[0,50,0,0],
						x:"center",
						textStyle:{
							color:"#fff",
							fontSize: 12,
							fontFamily: '微软雅黑',
							fontWeight: 'normal'
						}
					},

					tooltip : {
						trigger: 'item'
					},
					dataRange: {
						show:false,
						min: 0,
						max: 2500,
						x: 'left',
						y: 'bottom',
						text:['高','低'],		   // 文本，默认为数值文本
						calculable : true,
						formatter: function(value){
							return parseFloat(value);
						},
						textStyle:{
							color:"#fff"
						},
						color:["#06a6ff","#a1e1ff"]
					},
					series : [
						{
							name: '',
							type: 'map',
							mapType: 'china',
							itemStyle:{
								normal:{
									label:{show:positionShow},
									color:"transparent",
									borderColor:"#68d0fe",
									borderWidth:1,

								},
								emphasis:{label:{show:true}}
							},
							 label: {
				                normal: {
				                    show: true,
				                    textStyle:{
				                        color:"#fff"
				                    }
				                }
				            },
							data:[],
							// 自定义名称
							nameMap : {
								'Afghanistan':'阿富汗',
								'Angola':'安哥拉',
								'Albania':'阿尔巴尼亚',
								'United Arab Emirates':'阿联酋',
								'Argentina':'阿根廷',
								'Armenia':'亚美尼亚',
								'French Southern and Antarctic Lands':'法属南半球和南极领地',
								'Australia':'澳大利亚',
								'Austria':'奥地利',
								'Azerbaijan':'阿塞拜疆',
								'Burundi':'布隆迪',
								'Belgium':'比利时',
								'Benin':'贝宁',
								'Burkina Faso':'布基纳法索',
								'Bangladesh':'孟加拉国',
								'Bulgaria':'保加利亚',
								'The Bahamas':'巴哈马',
								'Bosnia and Herzegovina':'波斯尼亚和黑塞哥维那',
								'Belarus':'白俄罗斯',
								'Belize':'伯利兹',
								'Bermuda':'百慕大',
								'Bolivia':'玻利维亚',
								'Brazil':'巴西',
								'Brunei':'文莱',
								'Bhutan':'不丹',
								'Botswana':'博茨瓦纳',
								'Central African Republic':'中非共和国',
								'Canada':'加拿大',
								'Switzerland':'瑞士',
								'Chile':'智利',
								'China':'中国',
								'Ivory Coast':'象牙海岸',
								'Cameroon':'喀麦隆',
								'Democratic Republic of the Congo':'刚果民主共和国',
								'Republic of the Congo':'刚果共和国',
								'Colombia':'哥伦比亚',
								'Costa Rica':'哥斯达黎加',
								'Cuba':'古巴',
								'Northern Cyprus':'北塞浦路斯',
								'Cyprus':'塞浦路斯',
								'Czech Republic':'捷克共和国',
								'Germany':'德国',
								'Djibouti':'吉布提',
								'Denmark':'丹麦',
								'Dominican Republic':'多明尼加共和国',
								'Algeria':'阿尔及利亚',
								'Ecuador':'厄瓜多尔',
								'Egypt':'埃及',
								'Eritrea':'厄立特里亚',
								'Spain':'西班牙',
								'Estonia':'爱沙尼亚',
								'Ethiopia':'埃塞俄比亚',
								'Finland':'芬兰',
								'Fiji':'斐',
								'Falkland Islands':'福克兰群岛',
								'France':'法国',
								'Gabon':'加蓬',
								'United Kingdom':'英国',
								'Georgia':'格鲁吉亚',
								'Ghana':'加纳',
								'Guinea':'几内亚',
								'Gambia':'冈比亚',
								'Guinea Bissau':'几内亚比绍',
								'Equatorial Guinea':'赤道几内亚',
								'Greece':'希腊',
								'Greenland':'格陵兰',
								'Guatemala':'危地马拉',
								'French Guiana':'法属圭亚那',
								'Guyana':'圭亚那',
								'Honduras':'洪都拉斯',
								'Croatia':'克罗地亚',
								'Haiti':'海地',
								'Hungary':'匈牙利',
								'Indonesia':'印尼',
								'India':'印度',
								'Ireland':'爱尔兰',
								'Iran':'伊朗',
								'Iraq':'伊拉克',
								'Iceland':'冰岛',
								'Israel':'以色列',
								'Italy':'意大利',
								'Jamaica':'牙买加',
								'Jordan':'约旦',
								'Japan':'日本',
								'Kazakhstan':'哈萨克斯坦',
								'Kenya':'肯尼亚',
								'Kyrgyzstan':'吉尔吉斯斯坦',
								'Cambodia':'柬埔寨',
								'South Korea':'韩国',
								'Kosovo':'科索沃',
								'Kuwait':'科威特',
								'Laos':'老挝',
								'Lebanon':'黎巴嫩',
								'Liberia':'利比里亚',
								'Libya':'利比亚',
								'Sri Lanka':'斯里兰卡',
								'Lesotho':'莱索托',
								'Lithuania':'立陶宛',
								'Luxembourg':'卢森堡',
								'Latvia':'拉脱维亚',
								'Morocco':'摩洛哥',
								'Moldova':'摩尔多瓦',
								'Madagascar':'马达加斯加',
								'Mexico':'墨西哥',
								'Macedonia':'马其顿',
								'Mali':'马里',
								'Myanmar':'缅甸',
								'Montenegro':'黑山',
								'Mongolia':'蒙古',
								'Mozambique':'莫桑比克',
								'Mauritania':'毛里塔尼亚',
								'Malawi':'马拉维',
								'Malaysia':'马来西亚',
								'Namibia':'纳米比亚',
								'New Caledonia':'新喀里多尼亚',
								'Niger':'尼日尔',
								'Nigeria':'尼日利亚',
								'Nicaragua':'尼加拉瓜',
								'Netherlands':'荷兰',
								'Norway':'挪威',
								'Nepal':'尼泊尔',
								'New Zealand':'新西兰',
								'Oman':'阿曼',
								'Pakistan':'巴基斯坦',
								'Panama':'巴拿马',
								'Peru':'秘鲁',
								'Philippines':'菲律宾',
								'Papua New Guinea':'巴布亚新几内亚',
								'Poland':'波兰',
								'Puerto Rico':'波多黎各',
								'North Korea':'北朝鲜',
								'Portugal':'葡萄牙',
								'Paraguay':'巴拉圭',
								'Qatar':'卡塔尔',
								'Romania':'罗马尼亚',
								'Russia':'俄罗斯',
								'Rwanda':'卢旺达',
								'Western Sahara':'西撒哈拉',
								'Saudi Arabia':'沙特阿拉伯',
								'Sudan':'苏丹',
								'South Sudan':'南苏丹',
								'Senegal':'塞内加尔',
								'Solomon Islands':'所罗门群岛',
								'Sierra Leone':'塞拉利昂',
								'El Salvador':'萨尔瓦多',
								'Somaliland':'索马里兰',
								'Somalia':'索马里',
								'Republic of Serbia':'塞尔维亚共和国',
								'Suriname':'苏里南',
								'Slovakia':'斯洛伐克',
								'Slovenia':'斯洛文尼亚',
								'Sweden':'瑞典',
								'Swaziland':'斯威士兰',
								'Syria':'叙利亚',
								'Chad':'乍得',
								'Togo':'多哥',
								'Thailand':'泰国',
								'Tajikistan':'塔吉克斯坦',
								'Turkmenistan':'土库曼斯坦',
								'East Timor':'东帝汶',
								'Trinidad and Tobago':'特里尼达和多巴哥',
								'Tunisia':'突尼斯',
								'Turkey':'土耳其',
								'United Republic of Tanzania':'坦桑尼亚联合共和国',
								'Uganda':'乌干达',
								'Ukraine':'乌克兰',
								'Uruguay':'乌拉圭',
								'United States of America':'美国',
								'Uzbekistan':'乌兹别克斯坦',
								'Venezuela':'委内瑞拉',
								'Vietnam':'越南',
								'Vanuatu':'瓦努阿图',
								'West Bank':'西岸',
								'Yemen':'也门',
								'South Africa':'南非',
								'Zambia':'赞比亚',
								'Zimbabwe':'津巴布韦'
							}
						}
					]
				}
			},

			_translateSeries: function(option){
				var view = this;
				option.series[0].name = this.get("sName")||"";
				var data = this.get("data")||[];
				var seriesData = option.series[0].data = [];

				if(!this.get("mapType") || this.get("mapType")=='中国') {
					option.series[0].mapType = 'china';
				}else if(this.get("mapType")=='全球') {
					option.series[0].mapType = 'world';
				}else {
					option.series[0].mapType = this.get("mapType");
				}

				forEach(data, function(performance){
					seriesData.push(view._translateSeriesDataItem(performance));
				});
			},

			_translateOther: function(option){
				var data = this.get("data")||[];
				option.title.text = this.get("title")||"";
				var dataKey = this.get("dataKey");
				var maxValue;
				if(data != undefined && data.length > 0) {
					maxValue = data[0][dataKey];
					if(dataKey == "business/response_time/avg"||dataKey == "system/response_time/avg"){

						// option.dataRange.max = transform_num(maxValue); 
						option.dataRange.max = (maxValue/1000).toFixed(2);
					}else if(dataKey == "system/success/rate"||dataKey == "business/success/rate"){
						option.dataRange.max = 100;
					}else if(dataKey == "business/score/apdex"||dataKey == "system/score/apdex"){
						maxValue = data[data.length-1][dataKey];
						option.dataRange.max = maxValue;
					}else{
						option.dataRange.max = maxValue;
					}

				}
			},

			_setFormatter: function(option){
				// option.tooltip.formatter = this._tooltipFormatter(this.get("fmtType"));
			},

			_tooltipFormatter: function(type){
				return function(params, ticket, callback){
					params = Ember.A(params||[]);
					var formatter = APM.util.indicatorFormatter(type);
					var tooltip = params[0];
					tooltip +=  '<br/>' + params[1] + '：' + formatter(params[2]=="-"?undefined:params[2]);
					return tooltip;
				}
			},

			/**
			 * 将原始值转换为柱形图需要的series配置
			 */
			_translateSeriesDataItem: function(performance){
				var dataKey = this.get("dataKey");
				var name = performance['name'];
				if(dataKey == "system/success/rate"||dataKey == "business/success/rate"){
					var value = performance[dataKey];
				}else if(dataKey == "system/response_time/avg"||dataKey == "business/response_time/avg"){

				    var value = (performance[dataKey]/1000).toFixed(2);
				}else{
					var value = performance[dataKey];
				}
	
				
			
				var valueItem = {
						name: name,
						value: value,
						origData: performance
					};
				return valueItem;
			}
		});

		APM.ui.Map = MapView;

		return MapView;
	}
);